package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.UserHolder;
import com.itheima.reggie.domain.Cart;
import com.itheima.reggie.mapper.CartMapper;
import com.itheima.reggie.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;


//购物车的业务层实现类
@Service
@Transactional
public class CartServiceImpl implements CartService {

    @Autowired
    private CartMapper cartMapper;

    //添加购物车
    @Override
    public Cart addCart(Cart cartParam) {
        //创建条件查询对象
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        //创建条件查询语句:是否是同一个用户
        qw.eq(Cart::getUserId, UserHolder.get().getId());
        //创建条件查询语句:添加的是否是菜品
        qw.eq(cartParam.getDishId() != null, Cart::getDishId, cartParam.getDishId());
        //创建条件查询语句:添加的是否是套餐
        qw.eq(cartParam.getSetmealId() != null, Cart::getSetmealId, cartParam.getSetmealId());
        //调用mapper查询购物车对象
        Cart cart = cartMapper.selectOne(qw);
        //判断cart是否存在
        if (cart != null) {
            //cart存在,购物车中有菜品或者套餐
            cart.setNumber(cart.getNumber() + 1);
            //修改购物车对象
            cartMapper.updateById(cart);
            //返回
            return cart;
        }
        //cart不存在,购物车中没有菜品或者套餐
        //补全添加购物车对象的id
        cartParam.setUserId(UserHolder.get().getId());
        //补全添加购物车对象的菜品或套餐数量
        cartParam.setNumber(1);
        //补全添加购物车对象的创建时间
        cartParam.setCreateTime(new Date());
        //保存
        cartMapper.insert(cartParam);
        //返回
        return cartParam;
    }

    //查询购物车(用户只能查询自己的购物车)
    @Override
    public List<Cart> findList() {
        //创建条件查询对象
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        //创建条件查询语句
        qw.eq(Cart::getUserId, UserHolder.get().getId());
        //调用mapper
        List<Cart> cartList = cartMapper.selectList(qw);
        //返回
        return cartList;
    }

    //删除购物车(用户只能删除自己的购物车)
    @Override
    public void delete() {
        //创建条件查询对象
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        //创建条件查询语句
        qw.eq(Cart::getUserId, UserHolder.get().getId());
        //调用mapper
        cartMapper.delete(qw);
    }

    //修改菜品
    @Override
    public Cart update(Cart cartParam) {
        //创建条件查询对象
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        //创建条件查询语句:是否是同一个用户
        qw.eq(Cart::getUserId, UserHolder.get().getId());
        //创建条件查询语句:添加的是否是菜品
        qw.eq(cartParam.getDishId() != null, Cart::getDishId, cartParam.getDishId());
        //创建条件查询语句:添加的是否是套餐
        qw.eq(cartParam.getSetmealId() != null, Cart::getSetmealId, cartParam.getSetmealId());
        //调用mapper
        Cart cart = cartMapper.selectOne(qw);
        //查看购物车对象中菜品或套餐的数量
        if (cart.getNumber() == 1) {
            //购物车中只有一个菜品或套餐,再次修改为删除改菜品或套餐
            cartMapper.deleteById(cart.getId());
            return null;
        }
        //菜品或套餐的数量大于1
        //将该菜品或套餐的数量减一
        cart.setNumber(cart.getNumber() - 1);
        //修改
        cartMapper.updateById(cart);
        //返回
        return cart;
    }
}
